import axios from 'axios'
import type { AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios'
import { useUserStore } from '@/stores'
import router from '@/router'
import { API_BASE_URL } from '@/config/UrlConfig'
// 配置 Axios 实例
const request: AxiosInstance = axios.create({
  baseURL: API_BASE_URL, //接口地址
  timeout: 30000, // 设置超时时间
})

// 请求拦截器
request.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 在请求发送之前做一些处理，比如添加 token
    if (useUserStore().Authorization) {
      config.headers.Authorization = useUserStore().Authorization
    }
    return config
  },
  (error: any) => {
    // 处理请求错误
    return Promise.reject(error)
  },
)

// 响应拦截器
request.interceptors.response.use(
  (response: AxiosResponse) => {
    // 如果响应成功且有数据
    if (response.data) {
      // 如果后端返回的数据中包含 code 字段
      if (response.data.code !== undefined) {
        if (response.data.code === 0) {
          return response.data
        } else {
          ElMessage.error(response.data.msg || '请求失败')
          return Promise.reject(response.data)
        }
      }
      // 如果后端返回的数据没有 code 字段，直接返回数据
      return response.data
    }
    return response
  },
  (error: any) => {
    console.log('响应拦截器收到error:', error)
    // 处理 401 未授权的情况
    if (error.response?.status === 401) {
      ElMessage.error('登录过期，请重新登录')
      useUserStore().clearUser()
      useUserStore().clearToken()
      router.replace('/')
      return Promise.reject(error)
    }
    // 处理其他错误
    ElMessage.error(error.response?.data?.msg || '服务异常')
    return Promise.reject(error)
  },
)

export default request
